char*p="xin";与int*ap=5;结构一样,后者为野指针,前者为什么不是。谢谢!

来源:百度知道 编辑:UC知道 时间:2024/05/31 00:28:17

C/C++语言中字符串的值就是字符串中第一个字符的地址,相当于一个常量指针,它指向确定的合法内存,用它对字符指针赋值当然是可以的,赋值后的字符指针变量也指向了字符串第一个字符的地址;对于第二个声明的整型指针只能用同类型的指针或0或NULL进行初始化,不能用除了0之外的任何整数来初始化,因为除了0以外的整数并不表示指针或地址,所有整数中0是唯一可以直接赋值给指针变量的整数,作用相当于NULL。

int *ap=5;

相当于int *ap; ap=(int*)0x00000005;
由于0x00000005这个内存单元并没有被程序明确分配,导致ap指向的空间所存储的内容不可预知,即ap成为所谓的“野指针”。

char *p="xin";

这是字符串赋值的特殊形式,相当于char p[] = { 'x', 'i', 'n', '\0' };
如上所述,"xin"被看作一个字符数组,其存储空间由系统负责分配,p为数组名,同时也是指向数组首元素的指针。因此p指向的空间是由系统分配的,它不是“野”指针。